#include <iostream>

#define ERROR 0
#define CORRECT 1


/**
 * _E   =>  E'
 * _T   =>  T'
 * P    =>  +
 * M    =>  *
 * L    =>  (
 * R    =>  )
 * H    =>  #
*/
enum SYMBOL{
    E,_,T,t,F,i,P,M,L,R,H,e
};

typedef struct node{
    SYMBOL left;
    SYMBOL right[5];
    int isError;
}NODE;

typedef struct table{
    SYMBOL x;
    SYMBOL y;
    NODE expression;
}TABLE;

// 定义全局变量

TABLE PAT[100]; // 预测分析表

int count = 0;  // 当前预测分析表有多少条目

SYMBOL mStack[20];
int now = 0;    // 记录当前栈位置

SYMBOL a,X;

void initPAT();
void insertPAT(SYMBOL x, SYMBOL y, NODE expression);
NODE initNode(SYMBOL left, int num, int isError, SYMBOL right[]);
void printPAT();
void printHelp();
void push(SYMBOL x);
SYMBOL pop();
SYMBOL getTop();
int getNumOfPAT(SYMBOL x, SYMBOL y);
bool isEnd(SYMBOL x);    // 是否是终结符
SYMBOL Parse(char c);
void printError();
char format(SYMBOL x);
